///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
*	Contains code for a triangle container.
*	\file		LaborTrilist.h
*	\author		Pierre Terdiman
*	\date		April, 4, 2000
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __LABORTRILIST_H__
#define __LABORTRILIST_H__
#include "../LaborCoreDef.h"
NAMESPACE_LABOR3D_BEGIN
class  LABORCORE_API CLTriList : public CLContainer
{
public:
	// Constructor / Destructor
	CLTriList()					{}
	~CLTriList()					{}

	inline	unsigned int			getNbTriangles()	const	{ return getNbEntries()/9;			}
	inline	CLTriangle*		getTriangles()		const	{ return (CLTriangle*)getEntries();	}

	void			addTri(const CLTriangle& tri)
	{
		add(tri.mVerts[0].x).add(tri.mVerts[0].y).add(tri.mVerts[0].z);
		add(tri.mVerts[1].x).add(tri.mVerts[1].y).add(tri.mVerts[1].z);
		add(tri.mVerts[2].x).add(tri.mVerts[2].y).add(tri.mVerts[2].z);
	}

	void			addTri(const CLPoint3& p0, const CLPoint3& p1, const CLPoint3& p2)
	{
		add(p0.x).add(p0.y).add(p0.z);
		add(p1.x).add(p1.y).add(p1.z);
		add(p2.x).add(p2.y).add(p2.z);
	}
};

class  CLTriangleList : public CLContainer
{
public:
	// Constructor / Destructor
	CLTriangleList()				{}
	~CLTriangleList()			{}

	inline	unsigned int				getNbTriangles()	const	{ return getNbEntries()/3;				}
	inline	CLIndexedTriangle*	getTriangles()		const	{ return (CLIndexedTriangle*)getEntries();}

	void				addTriangle(const CLIndexedTriangle& tri)
	{
		add(tri.mVRef[0]).add(tri.mVRef[1]).add(tri.mVRef[2]);
	}

	void				addTriangle(unsigned int vref0, unsigned int vref1, unsigned int vref2)
	{
		add(vref0).add(vref1).add(vref2);
	}
};

NAMESPACE_LABOR3D_END

#endif //__LABORTRILIST_H__
